package cn.xzhang.boot.service;

import cn.xzhang.boot.common.pojo.PageResult;
import cn.xzhang.boot.model.dto.wallpaperCategories.WallpaperCategoriesAddReqDTO;
import cn.xzhang.boot.model.dto.wallpaperCategories.WallpaperCategoriesPageReqDTO;
import cn.xzhang.boot.model.dto.wallpaperCategories.WallpaperCategoriesStatusReqDTO;
import cn.xzhang.boot.model.dto.wallpaperCategories.WallpaperCategoriesUpdateReqDTO;
import cn.xzhang.boot.model.entity.WallpaperCategories;
import cn.xzhang.boot.model.vo.wallpaperCategories.WallpaperCategoriesSimpleVo;
import cn.xzhang.boot.model.vo.wallpaperCategories.WallpaperCategoriesVo;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * @author <a href="https://github.com/XiaoZhangCode">XiaoZhangCode</a>
 * @description 针对表【wallpaperCategories(壁纸分类表)】的数据库操作Service
 */
public interface WallpaperCategoriesService extends IService<WallpaperCategories> {

    /**
     * 添加壁纸分类信息。
     *
     * @param wallpaperCategoriesReqDTO 壁纸分类添加请求数据传输对象，包含要添加的壁纸分类的所有必要信息。
     * @return 返回添加操作的自增ID，用于标识此次添加操作。
     */
    long addWallpaperCategories(WallpaperCategoriesAddReqDTO wallpaperCategoriesReqDTO);

    /**
     * 更新壁纸分类信息。
     *
     * @param wallpaperCategoriesReqDTO 包含壁纸分类更新信息的请求DTO（数据传输对象）。该对象应包含需要更新的壁纸分类属性。
     * @return boolean 返回true如果壁纸分类信息更新成功，返回false如果更新失败或遇到错误。
     */
    boolean updateWallpaperCategories(WallpaperCategoriesUpdateReqDTO wallpaperCategoriesReqDTO);

    /**
     * 删除壁纸分类
     *
     * @param id 壁纸分类的唯一标识符
     * @return boolean 返回操作是否成功。true表示删除成功，false表示删除失败。
     */
    boolean deleteWallpaperCategories(Long id);

    /**
     * 根据WallpaperCategories对象获取对应的WallpaperCategoriesVo对象。
     *
     * @param wallpaperCategories 一个包含壁纸分类信息的WallpaperCategories对象。
     * @return 返回一个包含壁纸分类信息的WallpaperCategoriesVo对象。
     */
    WallpaperCategoriesSimpleVo getSimpleWallpaperCategoriesVO(WallpaperCategories wallpaperCategories);

    /**
     * 获取壁纸分类页面信息
     *
     * @param wallpaperCategoriesPageReqDTO 包含分页和筛选条件的壁纸分类请求数据传输对象
     * @return 返回壁纸分类页面的结果，包括壁纸分类列表和分页信息
     */
    PageResult<WallpaperCategoriesVo> getWallpaperCategoriesPage(WallpaperCategoriesPageReqDTO wallpaperCategoriesPageReqDTO);

    /**
     * 根据WallpaperCategories对象获取对应的WallpaperCategoriesVo对象。
     *
     * @param wallpaperCategories 一个包含壁纸分类信息的WallpaperCategories对象。
     * @return 返回一个包含壁纸分类信息的WallpaperCategoriesVo对象。
     */
    WallpaperCategoriesVo getWallpaperCategoriesVO(WallpaperCategories wallpaperCategories);

    /**
     * 更新壁纸分类的启用状态。
     *
     * @param wallpaperCategoriesEnabledReqDTO 包含壁纸分类启用状态更新的请求数据传输对象。
     * @return 返回更新操作是否成功。true表示更新成功，false表示更新失败。
     */
    Boolean updateWallpaperCategoriesEnabled(WallpaperCategoriesStatusReqDTO wallpaperCategoriesEnabledReqDTO);

    /**
     * 更新壁纸分类的推荐状态。
     *
     * @param wallpaperCategoriesSelectedReqDTO 包含壁纸分类推荐状态更新的请求数据传输对象。
     * @return 返回更新操作是否成功。true表示更新成功，false表示更新失败。
     */
    Boolean updateWallpaperCategoriesSelected(WallpaperCategoriesStatusReqDTO wallpaperCategoriesSelectedReqDTO);
}
